home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / Tools Plus 2.5.1 ƒ / Tools Plus 2.5.1 / Tools Plus 2.5.1 for Pascal / ToolsPlus.p < prev   
Encoding:
Text File  |  1994-05-29  |  59.1 KB  |  1,143 lines  |  [TEXT/PJMM]

  1. {    Tools Plus (Version 2.5) Pascal interface                                                                        }
  2. {    Copyright (C) 1989-1994 Water’s Edge Software                                                                }
  3.  
  4. {    This unit is the interface between Pascal applications and Tools Plus.  It must be used by any program or unit    }
  5. {    that makes reference to any part of Tools Plus.                                                                    }
  6. {                                                                                                                    }
  7. {    All TYPEs, VARiables, and CONSTants required by Tools Plus are included.                                        }
  8. {                                                                                                                    }
  9. {    You must include the entire set of Tools Plus libraries and related files in your project:                            }
  10. {        ToolsPlus.Lib1                                                                                                }
  11. {        ToolsPlus.Lib2                                                                                                }
  12. {        ToolsPlus.Lib3                                                                                                }
  13. {        ToolsPlus.p                                                                                                }
  14.  
  15.  
  16.  
  17. unit ToolsPlus;
  18.  
  19.  
  20. interface
  21.     const
  22.         UseColor = true;                                                {INITIALIZATION:    Use color if available        }
  23.         IgnoreColor = false;                                                {                    Don't use color                }
  24.         doNothing = 0;                                                    {POLLING:    no event                            }
  25.         doChgWindow = 1;                                                {            user clicked in an inactive window    }
  26.         doRefresh = 2;                                                    {            a window has to be refreshed        }
  27.         doGoAway = 3;                                                    {            the close box was clicked            }
  28.         doButton = 4;                                                    {            button was clicked                    }
  29.         doMenu = 5;                                                    {            menu was selected                    }
  30.         doKeyDown = 6;                                                {            a keyboard key was pressed        }
  31.         doAutoKey = 7;                                                    {            a keyboard key is auto-repeating    }
  32.         doKeyUp = 8;                                                    {            a keyboard key was released        }
  33.         doClickField = 9;                                                {            mouse clicked in inactive field        }
  34.         doScrollBar = 10;                                                {            mouse clicked in a scroll bar        }
  35.         doListBox = 11;                                                    {            some sort of List Box activity        }
  36.         doClick = 12;                                                    {            mouse click/drag                    }
  37.         doPopUpMenu = 13;                                            {            pop-up menu was selected            }
  38.         doPictButton = 14;                                                {            picture button activity                }
  39.         doClickControl = 101;                                            {            mouse clicked in a custom control    }
  40.         doManualEvent = 102;                                            {            manually processed events            }
  41.         doMoveWindow = 103;                                            {            a window was moved by user        }
  42.         doGrowWindow = 104;                                            {            a window was re-sized by the user    }
  43.         doClickDesk = 105;                                                {            mouse clicked in the desk top        }
  44.         doZoomWindow = 106;                                            {            zoom box was clicked by user        }
  45.         doSuspend = 107;                                                {            appl. suspended (in background)    }
  46.         doResume = 108;                                                {            appl. resumed (now active appl.)    }
  47.         inClick1 = 1;                                                    {CLICK:    mouse single-click completed        }
  48.         inClick2 = 2;                                                    {            mouse double-click completed        }
  49.         inClick3 = 3;                                                    {            mouse triple-click completed        }
  50.         inClick1Drag = -1;                                                {            mouse single-click, still dragging    }
  51.         inClick2Drag = -2;                                                {            mouse double-click, still dragging    }
  52.         inClick3Drag = -3;                                                {            mouse triple-click, still dragging        }
  53.         EnterKey = char($03);                                            {KEYS:        Key characters (ASCII) for common    }
  54.         BackSpaceKey = char($08);                                    {                non apha-numeric keys.        }
  55.         TabKey = char($09);                                            {                In some cases, several keys    }
  56.         ReturnKey = char($0D);                                            {                produce the same ASCII        }
  57.         EscClearKey = char($1B);                                        {  ($1B)            character.  They can be            }
  58.         LeftArrowKey = char($1C);                                        {                differentiated by using the key    }
  59.         RightArrowKey = char($1D);                                    {                code, as indicated below.        }
  60.         UpArrowKey = char($1E);                                        {                Some keys are available only    }
  61.         DownArrowKey = char($1F);                                    {                on an extended keyboard.        }
  62.         HelpKey = char($05);                                            {                                                }
  63.         HomeKey = char($01);                                            {                                                }
  64.         DeleteFwdKey = char($7F);                                        {                                                }
  65.         EndKey = char($04);                                            {                                                }
  66.         PageUpKey = char($0B);                                        {                                                }
  67.         PageDownKey = char($0C);                                        {                                                }
  68.         FKey = char($10);                                                {  ($10)        Function keys F1 to F15            }
  69.         EscKeyCode = $35;                                            {  ($1B)        KEY CODES used to differentiate    }
  70.         ClearKeyCode = $47;                                            {  ($1B)            between keys which produce    }
  71.         F1KeyCode = $7A;                                                {                the same key characters.        }
  72.         F2KeyCode = $78;                                                {                                                }
  73.         F3KeyCode = $63;                                                {                                                }
  74.         F4KeyCode = $76;                                                {                                                }
  75.         F5KeyCode = $60;                                                {                                                }
  76.         F6KeyCode = $61;                                                {                                                }
  77.         F7KeyCode = $62;                                                {                                                }
  78.         F8KeyCode = $64;                                                {                                                }
  79.         F9KeyCode = $65;                                                {                                                }
  80.         F10KeyCode = $6D;                                            {                                                }
  81.         F11KeyCode = $67;                                                {                                                }
  82.         F12KeyCode = $6F;                                                {                                                }
  83.         F13KeyCode = $69;                                                {                                                }
  84.         F14KeyCode = $6B;                                            {                                                }
  85.         F15KeyCode = $71;                                                {                                                }
  86.         mDividingLine = '-';                                                {MENUS:        Dividing line                    }
  87.         AppleChar = char($14);                                            {MENU CHARS:    Apple character                }
  88.         CheckChar = char($12);                                        {                Check Mark character            }
  89.         DiamondChar = char($13);                                        {                Diamond character                }
  90.         DotChar = char($A5);                                            {                Dot (or bullet) character            }
  91.         NoChar = char($00);                                            {                no character                    }
  92.                                                                     {PICTURE BUTTONS:                            }
  93.         picbutInstantEvent = $80000000;                                {        Report event on mouse-down            }
  94.         picbutTrackWithHilite = $40000000;                                {        Track using hiliting, like a radio button    }
  95.         picbutLockSelected = $20000000;                                {        Lock if selected (mouse can't deselect)    }
  96.         picbutSwitchSelected = $10000000;                            {        Switch 'selected' state if clicked        }
  97.         picbutRepeatEvents = $08000000;                                {        Repeat event when button is held down    }
  98.         picbutAutoValueChg = $04000000;                                {        Automatically change button's value    }
  99.         picbutScaleLinear = $00000000;                                {        Rate of automatic value change…        }
  100.         picbutScaleSlowAccel = $01000000;                            {            Linear, Slow Acceleration,            }
  101.         picbutScaleMedAccel = $02000000;                            {            Medium Acceleration, and            }
  102.         picbutScaleFastAccel = $03000000;                            {            Fast Acceleration.                    }
  103.         picbutLinear = 0;                                                {            Linear (use in structure)            }
  104.         picbutSlowAccel = 1;                                            {            Slow (use in structure)                }
  105.         picbutMedAccel = 2;                                            {            Medium (use in structure)            }
  106.         picbutFastAccel = 3;                                            {            Fast (use in structure)                }
  107.         picbutValueWrap = $00800000;                                    {        Button's range of values 'wrap' around    }
  108.         picbutLeftRightSplit = $00400000;                                {        Left side reduces value, right increases    }
  109.         picbutTopBottomSplit = $00200000;                            {        Top increases value, bottom reduces    }
  110.         picbutMultiStage = $00100000;                                    {        Button has multiple stages                }
  111.         picbutBigSICN3D = $00080000;                                    {        Create a larger SICN 3D button            }
  112.         picbutUsePICTS = $00040000;                                    {        Use PICTs instead of icons                }
  113.         picbutGray4use8 = $00020000;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  114.                                                                     {       Selection Effects…                        }
  115.         picbutSelectDarken = $00010000;                                {        Darken image                            }
  116.         picbutSelectDarkenSICN3D = $00008000;                        {        Darken (and push in) a 3D SICN icon    }
  117.         picbutSelectLightenSICN3D = $00004000;                        {        Lighten (and push in) a 3D SICN icon    }
  118.         picbutSelectPushedSICN3D = $00002000;                        {        Same color (and push in) a 3D SICN icon}
  119.         picbutSelectAltImage = $00000400;                            {        Use an alternate image                    }
  120.                                                                     {       Disabling Effects…                        }
  121.         picbutDimUsingBlackLite = $00000100;                            {        Overlay Black color using Lt Gray pat.    }
  122.         picbutDimUsingWhiteLite = $00000080;                            {        Overlay White color using Lt Gray pat.    }
  123.         picbutDimUsingWhite = $00000040;                                {        Overlay White color using Gray pat.        }
  124.         picbutDimLeaveBorder = $00000008;                            {        Leave border when applying effect        }
  125.         picbutDimAltImage = $00000004;                                {        Use an alternate image                    }
  126.         picbutDimNoChange = $00000002;                                {        Button looks the same when disabled    }
  127.                                                                     {POP-UP MENUS:                                }
  128.         popupNeverDimOutline = $0100;                                {        Never dim the control's outline?            }
  129.         popupNeverDimSelection = $0080;                                {        Never dim the selected item's text?        }
  130.         popupNeverDimTitle = $0040;                                    {        Never dim the title?                        }
  131.         popupNoArrow = $0020;                                        {        Is the "down arrow" hidden?                }
  132.         popupMultiSelect = $0010;                                        {        Allow multiple items to be selected?        }
  133.         popupUseWFont = $0008;                                        {        Use the window's font for the menu?    }
  134.         popupIconTitle = $0004;                                        {        Draw icon in the control's title?            }
  135.         popupFixedTitle = $0002;                                        {        Is a fixed title displayed in the control?    }
  136.         popupDefaultType = $0000;                                        {        Default menu (sys font, 1 item, no icon)    }
  137.         arrowCursor = 0;                                                {CURSORS:    "arrow" cursor                    }
  138.         GoAway = true;                                                    {WINDOWS:    no "close box"                    }
  139.         NoGoAway = false;                                                {                window has a "close box"        }
  140.         Modal = true;                                                    {                window is modal                }
  141.         NotModal = false;                                                {                window is modeless                }
  142.         ZoomBox = 8;                                                    {                zoom box added to procID        }
  143.         paletteProc = 32004;                                            {                Floating Palette window            }
  144.         altPaletteProc = 32006;                                            {                Floating Palette, drag bar on left}
  145.         ordPaletteProc = 32000;                                        {                window that looks like a palette    }
  146.         wNoKind = 0;                                                    {  Kinds of Windows:    Not open                }
  147.         wToolBarKind = 1;                                                {                        Tool Bar                }
  148.         wFloatingKind = 2;                                                {                        Floating Palette            }
  149.         wStandardKind = 3;                                                {                        Standard Window        }
  150.         wAnimateMove = $01;                                            {  Moving Windows:    Animate w/Zoom Lines    }
  151.         wOffsetForToolBar = $02;                                        {                        Offset co-ords for TB    }
  152.         wShow = true;                                                    {    Hiding Windows:    Display (unhide)        }
  153.         wHide = false;                                                    {                        Hide window            }
  154.         tbShiftWindows = $01;                                            {TOOL BAR:    Shift windows when TB opens    }
  155.         tbOffsetNewWindows = $02;                                    {                Offset new windows as they    }
  156.                                                                     {                  are opened (if TB is open).    }
  157.         DefaultButton = 4;                                                {BUTTONS:        “default” for the window            }
  158.         selected = true;                                                    {                button is selected (i.e. checked)}
  159.         notSelected = false;                                            {                button is not selected            }
  160.         scrlLeftEdge = -1;                                                {SCROLL BARS:    left edge of document        }
  161.         scrlTopEdge = -1;                                                {                    top edge of document        }
  162.         scrlRightEdge = 32767;                                            {                    right edge of document        }
  163.         scrlBottomEdge = 32767;                                        {                    bottom edge of document    }
  164.                                                                     {BUTTONS, MENUS, SCROLL BARS & ICONS:    }
  165.         enabled = true;                                                    {                object is enabled                }
  166.         disabled = false;                                                {                object is disabled                }
  167.         teBoxNoCR = 0;                                                {EDIT FIELDS:    box around field, no CR allowed    }
  168.         teBoxCR = 1;                                                    {                box around field, CR allowed    }
  169.         teNoBoxNoCR = 2;                                                {                no box, no CR allowed            }
  170.         teNoBoxCR = 3;                                                {                no box, CR allowed                }
  171.         teSelectAll = 0;                                                    {EDIT FIELD SELECTION:    all of text            }
  172.         teSelectStart = 1;                                                {                            beginning of text    }
  173.         teSelectEnd = 2;                                                {                            end of text            }
  174.         teReplace = true;                                                {PASTE INTO FIELD:    replace field contents    }
  175.         teInsert = false;                                                {                        insert text into field        }
  176.         OkAltBut = 1;                                                    {ALERTS:    OK                (Buttons refs)        }
  177.         CanAltBut = 2;                                                    {            Cancel                                }
  178.         YesAltBut = 3;                                                    {            Yes                                }
  179.         NoAltBut = 4;                                                    {            No                                    }
  180.         ContAltBut = 5;                                                    {            Continue                            }
  181.         SkipAltBut = 6;                                                    {            Skip                                }
  182.         QuitAltBut = 7;                                                    {            Quit                                }
  183.         NoButtonAlert = 0;                                                {            No buttons        (Alert Defs)            }
  184.         OkAlert = 11100;                                                {            OK (default)                        }
  185.         CanAlert = 11200;                                                {            Cancel (default)                    }
  186.         OkCanAlert = 22210;                                            {            OK (default) + Cancel                }
  187.         CanOkAlert = 21210;                                            {            OK + Cancel (default)                }
  188.         YesNoAlert = 22430;                                            {            Yes (default) + No                    }
  189.         NoYesAlert = 21430;                                            {            Yes + No (default)                     }
  190.         YesNoCanAlert = 33243;                                        {            Yes (default) + No + Cancel            }
  191.         NoYesCanAlert = 32243;                                        {            Yes + No (default) + Cancel            }
  192.         nmSysBeep = -1;                                                {NOTIFICATION:    Use System Error sound    }
  193.         nmSilentNote = 0;                                                {                    Silent notification            }
  194.         nmDefaultMsg = ' ';                                                {                    Use default message        }
  195.         nmNoMsg = '';                                                    {                    Don't display an alert        }
  196.         nmResetWhenDone = true;                                        {                    Reset to defaults after used}
  197.         nmKeepSettings = false;                                        {                    Keep settings after used    }
  198.         NoIcon = -32768;                                                {ICONS:    No icon used                        }
  199.                                                                     {        Disabled icons' default appearance…    }
  200.         DfltIconDimBlackLtPat = $01;                                    {            Overlay Black color w/ Lt Gray pat.    }
  201.         DfltIconDimWhiteLtPat = $02;                                    {            Overlay White color w/ Lt Gray pat.    }
  202.         DfltIconDimWhitePat = $04;                                        {            Overlay White color w/ Gray pat.    }
  203.         DfltIconLeaveBorder = $20;                                        {        Leave border when selected or disabled    }
  204.         DfltIconUpdateNow = $8000;                                    {        Update all windows with changes        }
  205.         on = true;                                                        {MISCELLANEOUS:                            }
  206.         off = false;                                                        {                                                }
  207.         maxNullTime = $7FFFFFFF;                                        {        Infinite time between doNothing evts    }
  208.         ZoomAcross = 0;                                                {ZOOM LINES:    transitional                        }
  209.         ZoomIn = -1;                                                    {                zoom inward (further away)        }
  210.         ZoomOut = 1;                                                    {                zoom outward (nearer)            }
  211.         none = 0;                                                        {used primarily for polling                        }
  212.  
  213.  
  214.  
  215.  
  216.     type
  217.  
  218.     { -   -   -   -   -   -   -   -   -   -   These record "types" are used for information transfer between   -   -   -   -   -   -   -   -   -   -   -    }
  219.     {                                     your application and Tools Plus libraries.                                    }
  220.  
  221.     {= Polling record's "event modifiers" info}
  222.         TPModifiersRec = packed record                                {This variable record contains an event's        }
  223.                 case integer of                                            {    "modifiers" in 2 formats…                    }
  224.                     0: (                                                        {    • Macintosh Event:                            }
  225.                             Num: integer                                            {        integer (bit operations required)            }
  226.                     );                                                            {                                                }
  227.                     1: (                                                        {    • Modifier integer parsed into components:    }
  228.                             bit15, bit14, bit13: boolean;                            {        (reserved bits)                            }
  229.                             ControlKey: boolean;                                    {        Control key was down at event (=1)        }
  230.                             OptionKey: boolean;                                    {        Option key was down at event (=1)        }
  231.                             CapsLock: boolean;                                    {        Caps Lock was down at event (=1)        }
  232.                             ShiftKey: boolean;                                    {        Shift key was down at event (=1)        }
  233.                             CmdKey: boolean;                                    {        Command key was down at event (=1)    }
  234.                             MouseUp: boolean;                                    {        Mouse button was UP at event (=1)        }
  235.                             bit6, bit5, bit4, bit3, bit2, bit1, bit0: boolean            {        (reserved bits)                            }
  236.                     );                                                            {                                                }
  237.             end;
  238.     {= Polling record's "button" info}
  239.         TPPollButtonRec = record
  240.                 Num: integer;                                                {Button number                                    }
  241.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  242.             end;
  243.     {= Polling record's "scroll bar" info}
  244.         TPPollScrollBarRec = record
  245.                 Num: integer;                                                {Scroll bar number                                }
  246.                 Part: integer                                                {Scroll bar's part                                }
  247.             end;
  248.     {= Polling record's "list box" info}
  249.         TPPollListBoxRec = record
  250.                 Num: integer;                                                {List box number                                }
  251.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  252.             end;
  253.     {= Polling record's "menu" info}
  254.         TPPollMenuRec = record
  255.                 Num: integer;                                                {Menu number                                    }
  256.                 Item: integer                                                {Menu item number                                }
  257.             end;
  258.     {= Polling record's "key-stroke" info}
  259.         TPPollKeyRec = packed record
  260.                 Code: integer;                                                {Logical key number of the typed key            }
  261.                 Chr: char;                                                    {ASCII character generated by typed key        }
  262.                 Unused: byte                                                { (reserved byte)                                }
  263.             end;
  264.     {= Polling record's "mouse location and time" info for mouse-down and mouse-up events}
  265.         TPPollMousePointRec = record
  266.                 Where: point;                                                {Event location in local co-ordinates            }
  267.                 When: longint;                                                {Event time in clock ticks from boot (1/60 sec)    }
  268.                 Modifiers: TPModifiersRec                                    {Event modifiers                                }
  269.             end;
  270.     {= Polling record's "mouse click/drag" info}
  271.         TPPollMouseRec = record
  272.                 What: integer;                                                {What type of mouse event? (click or drag)        }
  273.                 Down: array[1..3] of TPPollMousePointRec;                {Where & when did the mouse-down occur        }
  274.                 Up: array[1..3] of TPPollMousePointRec;                    {Where & when did the mouse-up occur            }
  275.                 Where: point                                                {Current mouse location in local co-ordinates    }
  276.             end;
  277.     {= POLLING record for Tools Plus}
  278.         TPPollPointer = ^TPPollRecord;                                    {Pointer to a Polling record                        }
  279.  
  280.         TPPollRecord = record                                        {Tools Plus Polling record…                        }
  281.                 What: integer;                                                {What type of event has occurred?                }
  282.                 Window: integer;                                            {Window number of the event                    }
  283.                 Button: TPPollButtonRec;                                    {Button number/double-click status                }
  284.                 ScrollBar: TPPollScrollBarRec;                                {Scroll bar number/scroll bar part                }
  285.                 Field: integer;                                                {Field number of event                            }
  286.                 ListBox: TPPollListBoxRec;                                {List box number/double-click status            }
  287.                 Menu: TPPollMenuRec;                                        {Menu number/menu item of an event            }
  288.                 Key: TPPollKeyRec;                                        {Logical key number & character of typed key    }
  289.                 Mouse: TPPollMouseRec;                                    {Click/drag info: [1..3] where & when            }
  290.                 Modifiers: TPModifiersRec;                                    {Modifier flags                                    }
  291.                 Event: EventRecord                                        {Macintosh Toolbox Event (raw)                    }
  292.             end;
  293.  
  294.  
  295.     {= WINDOW status information}
  296.         TPWindowStatus = record                                        {Window status record…                        }
  297.                 Kind: integer;                                                { • Window kind: Tool Bar, Palette, or Standard    }
  298.                 Open: boolean;                                                { • Is the window open?                            }
  299.                 Visible: boolean;                                            { • Is this window visible (not hidden)?            }
  300.                 Active: boolean;                                            { • Is this window active?                        }
  301.                 Front: boolean;                                                { • Is this the frontmost Tools Plus window?        }
  302.                 Current: boolean;                                            { • Is this the current window?                    }
  303.                 WorkWindow: boolean;                                        { • Is this the work window?                        }
  304.                 EditFieldWindow: boolean;                                    { • Does this window have the app's active field?    }
  305.                 ActiveField: integer;                                        { • Window's active field number                    }
  306.                 StrucRect: rect;                                            { • Structure rect (global).  Incl border & title bar    }
  307.                 ContRect: rect;                                                { • Content rect (global).  Working area only.        }
  308.             end;
  309.  
  310.  
  311.     {= Color Pen information}
  312.         ColorPenState = record                                        {Color equivalent for a 'PenState' record.  This    }
  313.                 PenState: PenState;                                        {    record also stores additional values for the    }
  314.                 ForegroundColor: RGBColor;                                {    window's foreground and background        }
  315.                 BackgroundColor: RGBColor                                {    colors.                                        }
  316.             end;
  317.  
  318.  
  319.     {= Picture Button Appearance & Behavior Specification (or you can use constants instead)                        }
  320.         TPPictButtonSpec = packed record                            {Picture Button's appearance and behavior        }
  321.                                                                     {    specifications in 2 formats…                }
  322.                 case integer of                                            {                                                }
  323.                     0: (                                                        {    • Parsed into components:                    }
  324.                             InstantEvent: boolean;                                {        Report event on mouse-down            }
  325.                             TrackWithHilite: boolean;                                {        Track using hiliting, like a radio button    }
  326.                             LockSelected: boolean;                                {        Lock if selected (mouse can't deselect)    }
  327.                             SwitchSelected: boolean;                                {        Switch 'selected' state if clicked        }
  328.                             RepeatEvents: boolean;                                {        Repeat event when button is held down    }
  329.                             AutoValueChg: boolean;                                {        Automatically change button's value    }
  330.                             AutoValueScaling: 0..3;                                {        Rate of change for button's value        }
  331.                             ValueWrap: boolean;                                    {        Button's range of values 'wrap' around    }
  332.                             LeftRightSplit: boolean;                                {        Left side reduces value, right increases    }
  333.                             TopBottomSplit: boolean;                                {        Top increases value, bottom reduces    }
  334.                             MultiStage: boolean;                                    {        Button has multiple stages                }
  335.                             BigSICN3D: boolean;                                    {        Create a larger SICN 3D button            }
  336.                             UsePICTS: boolean;                                    {        Use PICTs instead of icons                }
  337.                             Gray4use8: boolean;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  338.                                                                     {       Selection Effects…                        }
  339.                             SelectDarken: boolean;                                {        Darken image                            }
  340.                             SelectDarkenSICN3D: boolean;                        {        Darken (and push in) a 3D SICN icon    }
  341.                             SelectLightenSICN3D: boolean;                        {        Lighten (and push in) a 3D SICN icon    }
  342.                             SelectPushedSICN3D: boolean;                        {        Same color (and push in) a 3D SICN icon}
  343.                             bit19, bit20: boolean;                                    {           (reserved bits)                        }
  344.                             SelectAltImage: boolean;                                {        Use an alternate image                    }
  345.                             bit22: boolean;                                        {           (reserved bit)                            }
  346.                                                                     {       Disabling Effects…                        }
  347.                             DimUsingBlackLite: boolean;                            {        Overlay Black color using Lt Gray pat.    }
  348.                             DimUsingWhiteLite: boolean;                            {        Overlay White color using Lt Gray pat.    }
  349.                             DimUsingWhite: boolean;                                {        Overlay White color using Gray pat.        }
  350.                             bit26, bit27: boolean;                                    {           (reserved bits)                        }
  351.                             DimLeaveBorder: boolean;                            {        Leave border when applying effect        }
  352.                             DimAltImage: boolean;                                {        Use an alternate image                    }
  353.                             DimNoChange: boolean;                                {        Button looks the same when disabled    }
  354.                             bit31: boolean;                                        {           (reserved bit)                            }
  355.                     );                                                            {                                                }
  356.                     1: (                                                        {    • Longint equivalent:                        }
  357.                             Num: longint;                                            {        Specification longint                    }
  358.                     );                                                            {                                                }
  359.             end;
  360.  
  361.  
  362.     {= Pop-Up Menu Appearance & Behavior Specification (or you can use constants instead)                        }
  363.         TPPopUpMenuSpec = packed record                        {Pop-Up Menu's appearance and behavior        }
  364.                                                                     {    specifications in 2 formats…                }
  365.                 case integer of                                            {                                                }
  366.                     0: (                                                        {    • Parsed into components:                    }
  367.                             bit15, bit14, bit13, bit12: boolean;                        {           (reserved bits)                        }
  368.                             bit11, bit10, bit9: boolean;                            {           (reserved bits)                        }
  369.                             NeverDimOutline: boolean;                            {        Never dim the control's outline?            }
  370.                             NeverDimSelectedItem: boolean;                        {        Never dim the selected item's text?        }
  371.                             NeverDimTitle: boolean;                                {        Never dim the title?                        }
  372.                             NoArrow: boolean;                                    {        Is the "down arrow" hidden?                }
  373.                             MultipleSelections: boolean;                            {        Allow multiple items to be selected?        }
  374.                             useWFont: boolean;                                    {        Display using window's font?            }
  375.                             IconInTitle: boolean;                                    {        Draw icon in the control's title?            }
  376.                             FixedTitle: boolean;                                    {        Is a fixed title displayed in the control?    }
  377.                             bit0: boolean;                                            {           (reserved bit)                            }
  378.                     );                                                            {                                                }
  379.                     1: (                                                        {    • Integer equivalent:                        }
  380.                             Num: integer;                                            {        Specification integer                    }
  381.                     );                                                            {                                                }
  382.             end;                                                            {                                                }
  383.  
  384.  
  385.  
  386.  
  387.  
  388. {==================================== I N I T I A L I Z A T I O N ====================================    }
  389. {Initialize Tools Plus}
  390.     function InitToolsPlus (MoreHandles: integer;                    {Number of MoreMasters initializing cycles        }
  391.                                     MaxWindows: integer;                            {Maximum number of windows required            }
  392.                                     UseColorFlag: boolean                            {Should Color QuickDraw be used if available?    }
  393.                                     ): Boolean;                                        {Was initialization successful?                    }
  394.  
  395.  
  396. {======================================= W I N D O W S ========================================    }
  397. {Open a window and make it current}
  398.     procedure WindowOpen (Window: integer;                        {Window number                                }
  399.                                     left, top, right, bottom: integer;                    {Window's co-ordinates (global)                    }
  400.                                     Title: string;                                        {Window's title (if applicable)                    }
  401.                                     procID: integer;                                    {Window definition ID                            }
  402.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  403.  
  404. {Open a window and make it current (co-ordinates specified as a 'rect') }
  405.     procedure WindowOpenRect (Window: integer;                    {Window number                                }
  406.                                     Bounds: rect;                                        {Window's co-ordinates (global)                    }
  407.                                     Title: string;                                        {Window's title (if applicable)                    }
  408.                                     procID: integer;                                    {Window definition ID                            }
  409.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  410.  
  411. {Open the tool bar and make it current}
  412.     procedure ToolBarOpen (Window: integer;                        {Window number                                }
  413.                                     Height: integer;                                    {Tool bar height                                    }
  414.                                     procID: integer);                                    {Appearance/behavior specifications            }
  415.  
  416. {Close a window}
  417.     procedure WindowClose (Window: integer);                        {Window number                                }
  418.  
  419. {Change a window's size}
  420.     procedure WindowSize (Window: integer;                        {Window number                                }
  421.                                     Width, Height: integer;                            {Window's new width and height                    }
  422.                                     Update: boolean);                                {Force doRefresh event for newly exposed rgn?    }
  423.  
  424. {Move a window to the specified co-ordinates}
  425.     procedure WindowMove (Window: integer;                        {Window number                                }
  426.                                     hGlobal: integer;                                    {Horizontal co-ordinates (global)                }
  427.                                     vGlobal: integer;                                    {Vertical co-ordinates (global)                    }
  428.                                     procID: integer);                                    {Behavior specification                            }
  429.  
  430. {Hide or show a window}
  431.     procedure WindowDisplay (Window: integer;                    {Window number                                }
  432.                                     Show: boolean);                                    {Should the window be shown?                    }
  433.  
  434. {Make a specified window the "active" and "current" window}
  435.     procedure ActivateWindow (Window: integer);                    {Window number                                }
  436.  
  437. {Set a window's title}
  438.     procedure WindowTitle (Window: integer;                        {Window number                                }
  439.                                     Title: string);                                    {Window's title (if applicable)                    }
  440.  
  441. {Set the current window's "growing" limits (i.e. maximum/minimum size) }
  442.     procedure SetWindowSizeLimits (minHoriz, minVert, maxHoriz, MaxVert: integer);{Window's size limits in pixels}
  443.  
  444. {Set the current window's standard co-ordinates and user co-ordinates for "zooming"}
  445.     procedure SetWindowZoom (userRect, stdRect: rect);            {User & standard co-ordinates (global)            }
  446.  
  447. {Get the current window's user co-ordinates & standard co-ordinates for "zooming"}
  448.     procedure GetWindowZoom (var userRect, stdRect: Rect);        {User & standard co-ordinates (global)            }
  449.  
  450. {Make a specified window "current", but do not activate it}
  451.     procedure CurrentWindow (Window: integer);                    {Window number                                }
  452.  
  453. {Make the "active" window "current"}
  454.     procedure CurrentWindowReset;
  455.  
  456. {Get a window's status}
  457.     procedure WindowStatus (Window: integer;                        {Window number                                }
  458.                                     var Status: TPWindowStatus);                    {Window's status record                        }
  459.  
  460. {Get the active window number (last used window if Tool Bar and/or Floating Palettes are open)                        }
  461.     function ActiveWindowNumber: integer;                            {Window number of active window                }
  462.  
  463. {Get the current window number}
  464.     function CurrentWindowNumber: integer;                        {Window number of current window                }
  465.  
  466. {Get the front most window number}
  467.     function FirstWindowNumber: integer;                            {Window number of front most window            }
  468.                                                                     {    window is open.                                }
  469. {Get the Tool Bar's window number}
  470.     function ToolBarNumber: integer;                                {Tool Bar's window number                        }
  471.  
  472. {Get the first floating Palette's window number}
  473.     function FirstPaletteNumber: integer;                            {Front most floating Palette's window number    }
  474.  
  475. {Get the first standard window's number (not Tool Bar or Floating Palette).}
  476.     function FirstStdWindowNumber: integer;                        {Front most standard window's number            }
  477.  
  478. {Get the working window number}
  479.     function WorkWindowNumber: integer;                            {Working window number                        }
  480.  
  481. {Get the window number that contains the active editing field}
  482.     function EditFldWindowNumber: integer;                        {Window number containing active editing field        **    }
  483.  
  484. {Determine if a window is open}
  485.     function WindowIsOpen (Window: integer                        {Window number                                }
  486.                                     ): boolean;                                        {Is the window open?                            }
  487.  
  488. {Determine if a window is visible (open and not hidden)}
  489.     function WindowIsVisible (Window: integer                        {Window number                                }
  490.                                     ): boolean;                                        {Is the window visible?                            }
  491.  
  492. {Determine the type of window}
  493.     function WindowKind (Window: integer                            {Window number                                }
  494.                                     ): integer;                                            {Kind of window                                    }
  495.  
  496. {Get a window's "window pointer" }
  497.     function WindowPointer (Window: integer                        {Window number                                }
  498.                                     ): WindowPtr;                                        {Window's pointer                                }
  499.  
  500.  
  501. {======================================== B U T T O N S ========================================    }
  502. {Create a new button}
  503.     procedure NewButton (Button: integer;                            {Button number                                    }
  504.                                     left, top, right, bottom: integer;                    {Button's co-ordinates (local)                    }
  505.                                     Title: string;                                        {Button's title                                    }
  506.                                     procID: integer;                                    {Button's definition ID                            }
  507.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  508.  
  509. {Create a new button  (co-ordinates specified as a 'rect') }
  510.     procedure NewButtonRect (Button: integer;                        {Button number                                    }
  511.                                     Bounds: rect;                                        {Button's co-ordinates (local)                    }
  512.                                     Title: string;                                        {Button's title                                    }
  513.                                     procID: integer;                                    {Button's definition ID                            }
  514.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  515.  
  516. {Delete a button}
  517.     procedure DeleteButton (Button: integer);                        {Button number                                    }
  518.  
  519. {Enable/disable a button}
  520.     procedure EnableButton (Button: integer;                        {Button number                                    }
  521.                                     EnabledFlag: boolean);                            {Enable the button?                                }
  522.  
  523. {Select/deselect a button}
  524.     procedure SelectButton (Button: integer;                        {Button number                                    }
  525.                                     SelectedFlag: boolean);                            {Select the button?                                }
  526.  
  527. {Determine if a button is enabled}
  528.     function ButtonIsEnabled (Button: integer                        {Button number                                    }
  529.                                     ): boolean;                                        {Is the button enabled?                            }
  530.  
  531. {Determine if a button is selected}
  532.     function ButtonIsSelected (Button: integer                        {Button number                                    }
  533.                                     ): boolean;                                        {Is the button selected?                        }
  534.  
  535. {Set a button's title}
  536.     procedure ButtonTitle (Button: integer;                            {Button number                                    }
  537.                                     Title: string);                                    {Button's title                                    }
  538.  
  539. {Make a button the window's default button}
  540.     procedure SetDefaultButton (Button: integer);                    {Button number                                    }
  541.  
  542. {Remove the "default button status" from the window's default button}
  543.     procedure NoDefaultButton;
  544.  
  545. {"Flash" a push button as though it were pressed by the user}
  546.     procedure FlashButton (Button: integer);                        {Button number                                    }
  547.  
  548.  
  549. {=================================== P I C T U R E   B U T T O N S ==================================    }
  550. {Create a new Picture Button}
  551.     procedure NewPictButton (Button: integer;                        {Picture button number                            }
  552.                                     left, top: integer;                                    {Button's top-left corner in window's local co-ord}
  553.                                     BaseID: integer;                                    {Base image's ID number                        }
  554.                                     procID: longint;                                    {Appearance and Behavior specifications        }
  555.                                     EnabledFlag, SelectedFlag: boolean;                {"Button is enabled"  & "button is selected" flags    }
  556.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  557.  
  558. {Delete a picture button}
  559.     procedure DeletePictButton (Button: integer);                    {Picture button number                            }
  560.  
  561. {Enable/disable a picture button}
  562.     procedure EnablePictButton (Button: integer;                    {Picture button number}
  563.                                     EnabledFlag: boolean);                            {Enable the picture button?                        }
  564.  
  565. {Select/deselect a picture button}
  566.     procedure SelectPictButton (Button: integer;                    {Picture button number                            }
  567.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  568.  
  569. {Get a picture button's minimum setting}
  570.     function GetPictButtonMin (Button: integer                        {Picture button number                            }
  571.                                     ): integer;                                            {Picture button's minimum setting                }
  572.  
  573. {Set a picture button's minimum setting}
  574.     procedure SetPictButtonMin (Button: integer;                    {Picture button number                            }
  575.                                     minimum: integer);                                {Picture button's minimum setting                }
  576.  
  577. {Get a picture button's maximum setting}
  578.     function GetPictButtonMax (Button: integer                        {Picture button number                            }
  579.                                     ): integer;                                            {Picture button's maximum setting                }
  580.  
  581. {Set a picture button's maximum setting}
  582.     procedure SetPictButtonMax (Button: integer;                    {Picture button number                            }
  583.                                     maximum: integer);                                {Picture button's maximum setting                }
  584.  
  585. {Get a picture button's current value}
  586.     function GetPictButtonVal (Button: integer                        {Picture button number                            }
  587.                                     ): integer;                                            {Picture button's current value                    }
  588.  
  589. {Set a picture button's current value}
  590.     procedure SetPictButtonVal (Button: integer;                    {Picture button number                            }
  591.                                     value: integer);                                    {Picture button's value                            }
  592.  
  593. {Set a picture button's current value, and simultaneously select/deselect it}
  594.     procedure SetPictButtonValSelect (Button: integer;            {Picture button number                            }
  595.                                     value: integer;                                    {Picture button's value                            }
  596.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  597.  
  598. {Set a picture button's value acceleration 'automatic value changing'                                                }
  599.     procedure SetPictButtonAccel (Button: integer;                {Picture button number                            }
  600.                                     Rate: integer);                                    {0 = Linear, 1-3 = Slow to fast acceleration        }
  601.  
  602. {Set a picture button's speed for 'automatic value changing'                                                            }
  603.     procedure SetPictButtonSpeed (Button: integer;                {Picture button number                            }
  604.                                     Rate: integer);                                    {Rate of change (value increment per second)    }
  605.  
  606. {Determine if a picture button is enabled}
  607.     function PictButtonIsEnabled (Button: integer                    {Picture button number                            }
  608.                                     ): boolean;                                        {Is the button enabled?                            }
  609.  
  610. {Determine if a picture button is selected}
  611.     function PictButtonIsSelected (Button: integer                    {Picture button number                            }
  612.                                     ): boolean;                                        {Is the button selected?                        }
  613.  
  614. {"Flash" a picture button as though it were pressed by the user}
  615.     procedure FlashPictButton (Button: integer);                    {Picture button number                            }
  616.  
  617.  
  618. {===================================== S C R O L L   B A R S ======================================    }
  619. {Create a new scroll bar}
  620.     procedure NewScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  621.                                     left, top, right, bottom: integer;                    {Scroll bar's co-ordinates (local)                }
  622.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  623.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  624.  
  625. {Create a new scroll bar (co-ordinates specified as a 'rect') }
  626.     procedure NewScrollBarRect (ScrollBar: integer;                {Scroll bar number                                }
  627.                                     Bounds: rect;                                        {Scroll bar's co-ordinates (local)                }
  628.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  629.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  630.  
  631. {Delete a scroll bar}
  632.     procedure DeleteScrollBar (ScrollBar: integer);                    {Scroll bar number                                }
  633.  
  634. {Enable/disable a scroll bar}
  635.     procedure EnableScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  636.                                     EnabledFlag: boolean);                            {Enable the scroll bar?                            }
  637.  
  638. {Get a scroll bar's minimum setting}
  639.     function GetScrollBarMin (ScrollBar: integer                    {Scroll bar number                                }
  640.                                     ): integer;                                            {Scroll bar's minimum setting                    }
  641.  
  642. {Set a scroll bar's minimum setting}
  643.     procedure SetScrollBarMin (ScrollBar: integer;                    {Scroll bar number                                }
  644.                                     minimum: integer);                                {Scroll bar's minimum setting                    }
  645.  
  646. {Get a scroll bar's maximum setting}
  647.     function GetScrollBarMax (ScrollBar: integer                    {Scroll bar number                                }
  648.                                     ): integer;                                            {Scroll bar's maximum setting                    }
  649.  
  650. {Set a scroll bar's maximum setting}
  651.     procedure SetScrollBarMax (ScrollBar: integer;                    {Scroll bar number                                }
  652.                                     maximum: integer);                                {Scroll bar's maximum setting                    }
  653.  
  654. {Get a scroll bar's current value}
  655.     function GetScrollBarVal (ScrollBar: integer                        {Scroll bar number                                }
  656.                                     ): integer;                                            {Scroll bar's current value                        }
  657.  
  658. {Set a scroll bar's current value}
  659.     procedure SetScrollBarVal (ScrollBar: integer;                    {Scroll bar number                                }
  660.                                     value: integer);                                    {Scroll bar's current value                        }
  661.  
  662.  
  663. {==================================== E D I T I N G   F I E L D S ====================================    }
  664. {Create a new field}
  665.     procedure NewField (Field: integer;                                {Field number                                    }
  666.                                     left, top, right, bottom: integer;                    {Field's viewing area co-ordinates (local)        }
  667.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  668.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  669.                                     Just: integer);                                    {Justification: left, center, right                    }
  670.  
  671. {Create a new field (co-ordinates specified as a 'rect') }
  672.     procedure NewFieldRect (Field: integer;                            {Field number                                    }
  673.                                     Bounds: rect;                                        {Field's viewing area co-ordinates (local)        }
  674.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  675.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  676.                                     Just: integer);                                    {Justification: left, center, right                    }
  677.  
  678. {Delete a field}
  679.     procedure DeleteField (Field: integer);                            {Field number                                    }
  680.  
  681. {Activate a  field}
  682.     procedure ActivateField (Field: integer;                            {Field number                                    }
  683.                                     Selection: integer);                                {Text selection: all, start, end                    }
  684.  
  685. {Deactivate the active field}
  686.     procedure DeactivateField;
  687.  
  688. {Process a mouse click in an inactive field.  The click has been detected by the PollSystem procedure.}
  689.     procedure ClickInField;
  690.  
  691. {Get the active field's edited text}
  692.     procedure GetFieldString (var EditString: Str255);                {Field's edited text                                }
  693.  
  694. {Save the active field's edited text in the field's string}
  695.     procedure SaveFieldString;
  696.  
  697. {Determine the active field number}
  698.     function ActiveFieldNumber: integer;                            {Active field number                            }
  699.  
  700. {Turn string length limiting on/off for each new field created starting now}
  701.     procedure FieldLengthLimit (Limits: boolean);                    {Should newly created fields be length-limited?    }
  702.  
  703. {Offset a field}
  704.     procedure OffsetField (Field: integer;                            {Field number                                    }
  705.                                     dh, dv: integer);                                    {Number of pixels to be offset (horiz/vert)        }
  706.  
  707. {Paste text into a field}
  708.     procedure PasteIntoField (Field: integer;                        {Field number                                    }
  709.                                     Text: string;                                        {Text which is to be pasted                        }
  710.                                     Replace: boolean);                                {Replace all existing text in field?                }
  711.  
  712.  
  713. {===================================== L I S T   B O X E S  =======================================    }
  714. {Create a new List Box}
  715.     procedure NewListBox (ListBox: integer;                        {List box number                                }
  716.                                     left, top, right, bottom: integer;                    {List box co-ordinates (local)                    }
  717.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  718.                                                                     {    dragging, etc.                                }
  719.  
  720. {Create a new List Box (co-ordinates specified as a 'rect') }
  721.     procedure NewListBoxRect (ListBox: integer;                    {List box number                                }
  722.                                     Bounds: rect;                                        {List box co-ordinates (local)                    }
  723.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  724.                                                                     {    dragging, etc.                                }
  725.  
  726. {Delete a List Box}
  727.     procedure DeleteListBox (ListBox: integer);                    {List box number                                }
  728.  
  729. {Set a line of text in a List Box}
  730.     procedure SetListBoxText (ListBox: integer;                    {List box number                                }
  731.                                     LineNum: integer;                                    {Line number                                    }
  732.                                     Text: string);                                    {Text of specified line number                    }
  733.  
  734. {Get a line of text from a List Box}
  735.     procedure GetListBoxText (ListBox: integer;                    {List box number                                }
  736.                                     LineNum: integer;                                    {Line number                                    }
  737.                                     var Text: Str255);                                {Text of specified line number                    }
  738.  
  739. {Get a List Box's line number whose text is greater than or equal to the specified string}
  740.     function SearchListBox (ListBox: integer;                        {List box number                                }
  741.                                     Text: string                                        {Text being compared                            }
  742.                                     ): integer;                                            {Line number of text                            }
  743.  
  744. {Select/deselect a specified List Box line}
  745.     procedure SetListBoxLine (ListBox: integer;                    {List box number                                }
  746.                                     LineNum: integer;                                    {Line number                                    }
  747.                                     setIt: boolean);                                    {Selects the line?                                }
  748.  
  749. {Determine if a specific List Box line is selected}
  750.     function GetListBoxLine (ListBox: integer;                        {List box number                                }
  751.                                     LineNum: integer                                    {Line number                                    }
  752.                                     ): boolean;                                        {Is the line selected?                            }
  753.  
  754. {Get the line number of a selected line in a List Box, starting at LineNum and searching down}
  755.     function GetListBoxLines (ListBox: integer;                        {List box number                                }
  756.                                     LineNum: integer                                    {Line number                                    }
  757.                                     ): integer;                                            {Next selected line                                }
  758.  
  759. {Insert a blank line into a List Box}
  760.     procedure InsertListBoxLine (ListBox: integer;                    {List box number                                }
  761.                                     LineNum: integer);                                {Line number                                    }
  762.  
  763. {Delete a line from a List Box}
  764.     procedure DeleteListBoxLine (ListBox: integer;                    {List box number                                }
  765.                                     LineNum: integer);                                {Line number                                    }
  766.  
  767. {Turn a List Box's text drawing on/off}
  768.     procedure DrawListBox (ListBox: integer;                        {List box number                                }
  769.                                     drawIt: boolean);                                    {Draw the list box's text?                        }
  770.  
  771.  
  772. {========================================= M E N U S ==========================================    }
  773. {Create the "Apple" menu}
  774.     procedure AppleMenu (AboutName: string);                    {Optional "About…" name                        }
  775.  
  776. {Create a menu name, add/change a menu item, or rename an existing menu item (pull-down & hierarchical menus)}
  777.     procedure Menu (MenuNumber: integer;                        {Menu number                                    }
  778.                                     ItemNumber: integer;                                {Item number within the menu                    }
  779.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  780.                                     MenuText: string);                                {Menu title or item name                            }
  781.  
  782. {Attach a hierarchical menu to a menu item, or detach a hierarchical menu.}
  783.     procedure AttachMenu (MenuNumber: integer;                    {Menu number to which the submenu is attached}
  784.                                     ItemNumber: integer;                                {Item number to which the submenu is attached    }
  785.                                     SubMenuNumber: integer);                        {Hierarchical menu number being attached        }
  786.  
  787. {Insert a menu item}
  788.     procedure InsertMenuitem (MenuNumber: integer;                {Menu number                                    }
  789.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  790.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  791.                                     MenuText: string);                                {Item name                                        }
  792.  
  793. {Remove an entire menu and its associated items, or a menu item}
  794.     procedure RemoveMenu (MenuNumber: integer;                {Menu number                                    }
  795.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  796.  
  797. {Display the menu bar after making changes through the Menu or RemoveMenu procedure}
  798.     procedure UpdateMenuBar;
  799.  
  800. {Get a menu item's text}
  801.     procedure GetMenuString (MenuNumber: integer;                {Menu number                                    }
  802.                                     ItemNumber: integer;                                {Item number within the menu                    }
  803.                                     var MenuText: Str255);                            {Menu item's name                                }
  804.  
  805. {Change the name of a menu item}
  806.     procedure RenameItem (MenuNumber: integer;                    {Menu number                                    }
  807.                                     ItemNumber: integer;                                {Item number within the menu                    }
  808.                                     MenuText: string);                                {Menu item's name                                }
  809.  
  810. {Enable/disable a menu or menu item}
  811.     procedure EnableMenu (MenuNumber: integer;                    {Menu number                                    }
  812.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  813.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  814.  
  815. {Display/remove a menu item's check mark}
  816.     procedure CheckMenu (MenuNumber: integer;                    {Menu number                                    }
  817.                                     ItemNumber: integer;                                {Item number within the menu                    }
  818.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  819.  
  820. {Mark a menu item with a specified character (√ or •, etc)}
  821.     procedure MenuMark (MenuNumber: integer;                    {Menu number                                    }
  822.                                     ItemNumber: integer;                                {Item number within the menu                    }
  823.                                     markChar: char);                                    {Menu item's character                            }
  824.  
  825. {Get a menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  826.     procedure GetMenuMark (MenuNumber: integer;                {Menu number                                    }
  827.                                     ItemNumber: integer;                                {Item number within the menu                    }
  828.                                     var markChar: char);                                {Menu item's character                            }
  829.  
  830. {Specify a keyboard equivalent for a menu item}
  831.     procedure MenuCmd (MenuNumber: integer;                    {Menu number                                    }
  832.                                     ItemNumber: integer;                                {Item number within the menu                    }
  833.                                     cmdChar: char);                                    {Menu item's keyboard-equivalent character    }
  834.  
  835. {Get a keyboard equivalent for a menu item}
  836.     procedure GetMenuCmd (MenuNumber: integer;                {Menu number                                    }
  837.                                     ItemNumber: integer;                                {Item number within the menu                    }
  838.                                     var cmdChar: char);                                {Menu item's keyboard-equivalent character    }
  839.  
  840. {Specify an icon to be displayed by a menu item}
  841.     procedure MenuIcon (MenuNumber: integer;                    {Menu number                                    }
  842.                                     ItemNumber: integer;                                {Item number within the menu                    }
  843.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  844.  
  845. {Get the specifier for the icon that is displayed by a menu item}
  846.     procedure GetMenuIcon (MenuNumber: integer;                {Menu number                                    }
  847.                                     ItemNumber: integer;                                {Item number within the menu                    }
  848.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  849.  
  850. {Set the character style for a menu item}
  851.     procedure MenuStyle (MenuNumber: integer;                    {Menu number                                    }
  852.                                     ItemNumber: integer;                                {Item number within the menu                    }
  853.                                     theStyle: Style);                                    {Menu item's character style                    }
  854.  
  855. {Determine the number of items in a menu}
  856.     function MenuItemCount (MenuNumber: integer                    {Menu number                                    }
  857.                                     ): integer;                                            {Number of items in the menu                    }
  858.  
  859. {Determine a menu's parent menu number}
  860.     procedure GetParentMenu (var MenuNumber: integer;            {Parent menu's menu number                    }
  861.                                     var ItemNumber: integer;                            {Parent menu's item number                     }
  862.                                     SubMenuNumber: integer);                        {Menu number whose parent menu is determined}
  863.  
  864. {Determine a menu item's submenu number}
  865.     procedure GetSubMenu (MenuNumber: integer;                    {Menu number                                    }
  866.                                     ItemNumber: integer;                                {Item number within the menu                    }
  867.                                     var SubMenuNumber: integer);                    {Menu number of this item's submenu            }
  868.  
  869. {Highlight a menu in the menu bar, or turn off menu bar highlights}
  870.     procedure MenuHilite (MenuNumber: integer);                    {Menu num for a pull-down menu (1-15, 0=none)    }
  871.  
  872.  
  873. {==================================== P O P - U P   M E N U S =====================================    }
  874. {Create a new Pop-Up menu}
  875.     procedure NewPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  876.                                     left, top, right, bottom: integer;                    {Enclosing rectangle co-ordinates (local)        }
  877.                                     MenuTitle: string;                                {Title                                            }
  878.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  879.                                     EnabledFlag: boolean);                            {"Menu is enabled" flag                            }
  880.  
  881. {Create a new Pop-Up menu (co-ordinates specified as a 'rect') }
  882.     procedure NewPopUpRect (MenuNumber: integer;                {Pop-Up Menu number                            }
  883.                                     Bounds: rect;                                        {Enclosing rectangle co-ordinates (local)        }
  884.                                     Title: string;                                        {Title                                            }
  885.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  886.                                     EnabledFlag: boolean);                            {"Menu is enabled"  flag                            }
  887.  
  888. {Add or change a Pop-Up menu item, or rename an existing menu item}
  889.     procedure PopUpMenu (MenuNumber: integer;                    {Pop-Up Menu number                            }
  890.                                     ItemNumber: integer;                                {Item number within the menu                    }
  891.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  892.                                     MenuText: string);                                {Item name                                        }
  893.  
  894. {Insert a Pop-Up menu item}
  895.     procedure InsertPopUpItem (MenuNumber: integer;                {Pop-Up Menu number                            }
  896.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  897.                                     EnabledFlag: boolean;                            {Is menu item enabled?                            }
  898.                                     MenuText: string);                                {Item name                                        }
  899.  
  900. {Remove an Pop-Up menu, or a Pop-Up menu item}
  901.     procedure RemovePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  902.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  903.  
  904. {Get an Pop-Up Menu item's text}
  905.     procedure GetPopUpString (MenuNumber: integer;                {Pop-Up Menu number                            }
  906.                                     ItemNumber: integer;                                {Item number within the menu                    }
  907.                                     var MenuText: str255);                            {Menu item's name                                }
  908.  
  909. {Change the name of a Pop-Up Menu item}
  910.     procedure RenamePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  911.                                     ItemNumber: integer;                                {Item number within the menu                    }
  912.                                     MenuText: string);                                {Menu item's name                                }
  913.  
  914. {Enable/disable a Pop-Up Menu or menu item}
  915.     procedure EnablePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  916.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  917.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  918.  
  919. {Determine if a Pop-Up Menu is enabled}
  920.     function PopUpIsEnabled (MenuNumber: integer                {Pop-Up Menu number                            }
  921.                                     ): boolean;                                        {Is the menu enabled?                            }
  922.  
  923. {Display/remove a Pop-Up Menu item's check mark}
  924.     procedure CheckPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  925.                                     ItemNumber: integer;                                {Item number within the menu                    }
  926.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  927.  
  928. {Mark a Pop-Up Menu item with a specified character (√ or •, etc)}
  929.     procedure PopUpMark (MenuNumber: integer;                    {Pop-Up Menu number                            }
  930.                                     ItemNumber: integer;                                {Item number within the menu                    }
  931.                                     markChar: char);                                    {Menu item's character                            }
  932.  
  933. {Get a Pop-Up Menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  934.     procedure GetPopUpMark (MenuNumber: integer;                {Pop-Up Menu number                            }
  935.                                     ItemNumber: integer;                                {Item number within the menu                    }
  936.                                     var markChar: char);                                {Menu item's character                            }
  937.  
  938. {Specify an icon to be displayed by a Pop-Up Menu item}
  939.     procedure PopUpIcon (MenuNumber: integer;                    {Pop-Up Menu number                            }
  940.                                     ItemNumber: integer;                                {Item number within the menu                    }
  941.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  942.  
  943. {Get the specifier for the icon that is displayed by a Pop-Up Menu item}
  944.     procedure GetPopUpIcon (MenuNumber: integer;                {Pop-Up Menu number                            }
  945.                                     ItemNumber: integer;                                {Item number within the menu                    }
  946.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  947.  
  948. {Set the character style for a Pop-Up Menu item}
  949.     procedure PopUpStyle (MenuNumber: integer;                    {Pop-Up Menu number                            }
  950.                                     ItemNumber: integer;                                {Item number within the menu                    }
  951.                                     theStyle: Style);                                    {Menu item's character style                    }
  952.  
  953. {Determine the number of items in a Pop-Up Menu}
  954.     function PopUpItemCount (MenuNumber: integer                {Pop-Up Menu number                            }
  955.                                     ): integer;                                            {Number of items in the menu                    }
  956.  
  957. {Determine the selected item in a Pop-Up Menu}
  958.     function GetPopUpSelection (MenuNumber: integer                {Pop-Up Menu number                            }
  959.                                     ): integer;                                            {Selected item in the menu                        }
  960.  
  961.  
  962. {======================================= C U R S O R S  ========================================    }
  963. {Change the cursor shape}
  964.     procedure CursorShape (CursorType: integer);                    {Cursor type                                    }
  965.  
  966. {Reset the cursor to its appropriate shape depending on its location in the active window.}
  967.     procedure ResetCursor;
  968.  
  969. {Create a new Cursor Table}
  970.     procedure NewCursorTable (CursorTable: integer;                {Cursor table number                            }
  971.                                     CursorType: integer);                                {Cursor type                                    }
  972.  
  973. {Delete a Cursor Table}
  974.     procedure DeleteCursorTable (CursorTable: integer);            {Cursor table number                            }
  975.  
  976. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone}
  977.     procedure CursorZone (CursorTable: integer;                    {Cursor table number                            }
  978.                                     CursorZone: integer;                                {Cursor zone number                            }
  979.                                     CursorType: integer;                                {Cursor type                                    }
  980.                                     left, top, right, bottom: integer);                    {Cursor zone's co-ordinates (local)                }
  981.  
  982. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'rect') }
  983.     procedure CursorZoneRect (CursorTable: integer;                {Cursor table number                            }
  984.                                     CursorZone: integer;                                {Cursor zone number                            }
  985.                                     CursorType: integer;                                {Cursor type                                    }
  986.                                     ZoneRect: rect);                                    {Cursor zone's co-ordinates (local)                }
  987.  
  988. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'region') }
  989.     procedure CursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  990.                                     CursorZone: integer;                                {Cursor zone number                            }
  991.                                     CursorType: integer;                                {Cursor type                                    }
  992.                                     ZoneRgn: RgnHandle);                            {Cursor zone's region (local)                    }
  993.  
  994. {Indicate that the cursor shape may have to be recalculated due to manually altering Cursor Zone regions.}
  995.     procedure ChangedCursorZone;
  996.  
  997. {Delete a Cursor Zone}
  998.     procedure DeleteCursorZone (CursorTable: integer;                {Cursor table number                            }
  999.                                     CursorZone: integer);                                {Cursor zone number                            }
  1000.  
  1001. {Get the bounding rectangle of a specified Cursor Zone}
  1002.     procedure GetCursorZone (CursorTable: integer;                {Cursor table number                            }
  1003.                                     CursorZone: integer;                                {Cursor zone number                            }
  1004.                                     var ZoneRect: rect);                                {Cursor zone's bounding rectangle                }
  1005.  
  1006. {Get a handle to a specified Cursor Zone's region}
  1007.     function GetCursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  1008.                                     CursorZone: integer                                {Cursor zone number                            }
  1009.                                     ): RgnHandle;                                        {Handle to Cursor zone's region                    }
  1010.  
  1011. {Make the current window use a specified Cursor Table}
  1012.     procedure UseCursorTable (CursorTable: integer);                {Cursor table number                            }
  1013.  
  1014. {Find the cursor zone that contains a specified point}
  1015.     function FindCursorZone (thePoint: point                        {Location in window's local co-ordinates            }
  1016.                                     ): integer;                                            {Cursor zone number containing the point        }
  1017.  
  1018. {Enable/disable clicks on push-buttons when the watchCursor is displayed}
  1019.     procedure WatchCursorButtons (Allowed: boolean);            {Can push-buttons be clicked when the            }
  1020.                                                                     {    watchCursor is displayed?                    }
  1021.  
  1022.  
  1023. {======================================== P O L L I N G =========================================    }
  1024. {Tools Plus polling procedure}
  1025.     function PollSystem (var UserPoll: TPPollRecord                {Polling record                                    }
  1026.                                     ): boolean;                                        {Did an event occurred?                        }
  1027.  
  1028. {Set the number of ticks (1/60 sec) your application can wait until it receives a doNothing event.}
  1029.     procedure SetNullTime (ForegroundTime: longint;                {Duration when application is active                }
  1030.                                     BackgroundTime: longint);                        {Duration when application is suspended        }
  1031.  
  1032. {Determine if "waiting for doNothing events" (timed doNothing events) is supported.}
  1033.     function WaitAvail: boolean;                                    {Is waiting between doNothing events supported?}
  1034.  
  1035. {Determine if your application is 'suspended' (i.e. this is not the active application)}
  1036.     function ApplicationSuspended: boolean;                        {Is your application suspended?                }
  1037.  
  1038. {Clear the mouse's current click or drag (i.e. discontinue the process, clear the event}
  1039.     procedure ResetMouseClicks;
  1040.  
  1041.  
  1042. {==================================== C O L O R   D R A W I N G ===================================    }
  1043. {Determine if the Macintosh has Color QuickDraw}
  1044.     function HasColorQuickDraw: boolean;                            {Does the Mac have Color QuickDraw?            }
  1045.  
  1046. {Determine the number of logical screens (distinct screen depth and color/gray settings)}
  1047.     function NumberOfScreens: integer;                            {Number of logical screens available            }
  1048.  
  1049. {Begin updating the specified logical screen}
  1050.     procedure BeginUpdateScreen (TheScreen: integer);            {Logical screen number                            }
  1051.  
  1052. {End updating the most recent logical screen}
  1053.     procedure EndUpdateScreen;
  1054.  
  1055. {Determine the logical screen's depth}
  1056.     function ScreenDepth: integer;                                    {Screen depth in bits                            }
  1057.  
  1058. {Determine if the logical screen is set to display in color    }
  1059.     function ScreenHasColors: boolean;                            {Is the screen set to display in color?            }
  1060.  
  1061. {Color equivalent to 'PenNormal' routine}
  1062.     procedure PenColorNormal;
  1063.  
  1064. {Color equivalent to 'GetPenState' routine}
  1065.     procedure GetColorPenState (var ThePenState: ColorPenState);
  1066.  
  1067. {Color equivalent to 'SetPenState' routine}
  1068.     procedure SetColorPenState (ThePenState: ColorPenState);
  1069.  
  1070.  
  1071. {================================= U S E R    N O T I F I C A T I O N =================================    }
  1072. {Define the settings for the Notification Manager.}
  1073.     procedure SetNotification (IconID: integer;                        {'SICN' icon ID displayed during notification        }
  1074.                                     SoundID: integer;                                    {Sound ID that is played at notification            }
  1075.                                     Message: string;                                {Message displayed during notification            }
  1076.                                     ResetAfterUse: boolean);                            {Revert settings to defaults after notification?    }
  1077.  
  1078. {If this application is inactive, inform user that this application needs attention.}
  1079.     function PostNotification: boolean;                                {Was the user notified?                            }
  1080.  
  1081.  
  1082. {==================================== M I S C E L L A N E O U S ===================================    }
  1083. {Determine the System file version}
  1084.     function SystemVersion: extended;                                {System file version (eg: 7.0.1 returned as 7.01)}
  1085.  
  1086. {Draw an icon (ICON, ICN#, icl8, icl4, and cicn)}
  1087.     procedure DrawIcon (theIcon: integer;                            {Icon ID number                                }
  1088.                                     left, top: integer;                                    {Icon's top-left corner in window's local co-ord.    }
  1089.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the icon?  Select the icon?                }
  1090.  
  1091. {Specify the default appearance for disabled icons}
  1092.     procedure DefaultIconLook (IconSpec: integer);                {Appearance specifications                        }
  1093.  
  1094. {Draw a standard Macintosh progress thermometer}
  1095.     procedure DrawThermometer (DisplayRect: rect;                {Thermometer's co-ordinates (local)                }
  1096.                                     Percent: real);                                    {Percent complete (i.e. .5 means 50%)            }
  1097.  
  1098. {Display a dynamic Alert Box and return the use's action}
  1099.     function AlertBox (theIcon: integer;                                {Icon ID number                                }
  1100.                                     AlertText: string;                                {Alert's text                                        }
  1101.                                     AlertCode: longint                                {Button setup codes                            }
  1102.                                     ): integer;                                            {Button clicked by user                            }
  1103.  
  1104. {Change a button name for the next use of the dynamic Alert Box}
  1105.     procedure AlertButtonName (Button: integer;                    {Button number from 1 to 9                        }
  1106.                                     Title: string);                                    {Button's title                                    }
  1107.  
  1108. {Draw "zoom" lines (expanding/collapsing rectangle)}
  1109.     procedure ZoomLines (OldRect: Rect;                            {Starting rectangle (global co-ordinates)        }
  1110.                                     NewRect: Rect;                                    {Ending rectangle (global co-ordinates)            }
  1111.                                     Zoom: integer);                                    {Zoom across, in, or out                            }
  1112.  
  1113. {Play the System Error sound}
  1114.     procedure Beep;
  1115.  
  1116. {Wait for a specified duration}
  1117.     procedure Wait (ClockTicks: integer);                            {Number of ticks (1/60th sec) to wait            }
  1118.  
  1119. {Determine the minimum value of 2 numbers}
  1120.     function min (Val1, Val2: longint): longint;
  1121.  
  1122. {Determine the maximum value of 2 numbers}
  1123.     function max (Val1, Val2: longint): longint;
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129. {PRIVATE:    This function obtains the System file's version number as an integer for the SystemVersion function.    }
  1130.     function _SYSV: integer;
  1131.  
  1132.  
  1133.  
  1134. implementation
  1135.  
  1136. {The SystemVersion function returns the System File's version as an 'extended' type floating-point number.  This    }
  1137. {source code, when compiled, will produce an appropriate 'extended' type floating-point number whose format is        }
  1138. {determined by your compiler's settings (ie: Compiled for a math co-processor, 68040, or not)                        }
  1139.     function SystemVersion;
  1140.     begin
  1141.         SystemVersion := _SYSV / 100;                                {Get System Version and convert to an            }
  1142.     end;                                                                {    extended type.                                }
  1143. end.